home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / msqc25t1 / sysinfo.c < prev    next >
C/C++ Source or Header  |  1990-09-08  |  3KB  |  79 lines

  1.  
  2. /* SYSINFO.C illustrates miscellaneous DOS and BIOS status functions
  3.  * including:
  4.  *      _dos_getdrive       _dos_setdrive       _dos_getdiskfree
  5.  *      _bios_memsize       _bios_equiplist     _bios_printer
  6.  *
  7.  * See DISK.C for another example of _dos_getdiskfree.
  8.  *
  9.  * Also illustrated:
  10.  *      union               bitfield struct
  11.  */
  12.  
  13. #include <dos.h>
  14. #include <bios.h>
  15. #include <conio.h>
  16. #include <stdio.h>
  17. #define LPT1 0
  18.  
  19. void main()
  20. {
  21.     struct diskfree_t drvinfo;
  22.     unsigned drive, drivecount, memory, pstatus;
  23.     union
  24.     {                                   /* Access equiment either as:    */
  25.         unsigned u;                     /*   unsigned or                 */
  26.         struct                          /*   bit fields                  */
  27.         {
  28.             unsigned diskflag : 1;      /* Diskette drive installed?     */
  29.             unsigned coprocessor : 1;   /* Coprocessor? (except on PC)   */
  30.             unsigned sysram : 2;        /* RAM on system board           */
  31.             unsigned video : 2;         /* Startup video mode            */
  32.             unsigned disks : 2;         /* Drives 00=1, 01=2, 10=3, 11=4 */
  33.             unsigned dma : 1;           /* 0=Yes, 1=No (1 for PC Jr.)    */
  34.             unsigned comports : 3;      /* Serial ports                  */
  35.             unsigned game : 1;          /* Game adapter installed?       */
  36.             unsigned modem : 1;         /* Internal modem?               */
  37.             unsigned printers : 2;      /* Number of printers            */
  38.         } bits;
  39.     } equip;
  40.     char y[] = "YES", n[] = "NO";
  41.  
  42.     /* Get current drive. */
  43.     _dos_getdrive( &drive );
  44.     printf( "Current drive:\t\t\t%c:\n", 'A' + drive - 1 );
  45.  
  46.     /* Set drive to current drive in order to get number of drives. */
  47.     _dos_setdrive( drive, &drivecount );
  48.  
  49.     _dos_getdiskfree( drive, &drvinfo );
  50.     printf( "Disk space free:\t\t%ld\n",
  51.             (long)drvinfo.avail_clusters *
  52.             drvinfo.sectors_per_cluster *
  53.             drvinfo.bytes_per_sector );
  54.  
  55.     /* Get new drive and number of logical drives in system. */
  56.     _dos_getdrive( &drive );
  57.     printf( "Number of logical drives:\t%d\n", drivecount );
  58.  
  59.     memory = _bios_memsize();
  60.     printf( "Memory:\t\t\t\t%dK\n", memory );
  61.  
  62.     equip.u = _bios_equiplist();
  63.  
  64.     printf( "Disk drive installed:\t\t%s\n", equip.bits.diskflag ? y : n );
  65.     printf( "Coprocessor installed:\t\t%s\n", equip.bits.coprocessor ? y : n );
  66.     printf( "Game adapter installed:\t\t%s\n", equip.bits.game ? y : n );
  67.     printf( "Serial ports:\t\t\t%d\n", equip.bits.comports );
  68.     printf( "Number of printers:\t\t%d\n", equip.bits.printers );
  69.  
  70.     /* Fail if any error bit is on, or if either operation bit is off. */
  71.     pstatus = _bios_printer( _PRINTER_STATUS, LPT1, 0 );
  72.     if( (pstatus & 0x29) || !(pstatus & 0x80) || !(pstatus & 0x10) )
  73.         pstatus = 0;
  74.     else
  75.         pstatus = 1;
  76.     printf( "Printer available:\t\t%s\n", pstatus ? y : n );
  77. }
  78.  
  79.